當我們再撰寫程式的時候,必須要養成一個良好的習慣,每個業務邏輯要加上例外處理的判斷,Java程式語言中可以使用try{}catch(Exception ex){}
的敘述來將我們的Business Logic代碼包覆,以避免程式再執行的途中發生了錯誤而造成無法挽回的狀況,如果當妳的處理金流的程式再某行中發生了問題,金額沒有處理好而造成了公司的財務損失,小則賠錢大則公司會因此而倒閉!
Web中常見的發生例外時,我們會將執行的數據訪問修改做roll back再將錯誤代碼與錯誤訊息紀錄起來,以利於程式人員做DEBUG的效率,再來我們可以將訪問者導到一個error.html的頁面,此頁面是當程式出現錯誤,發生例外時才做導向的工作
ex:
SQLExceptions
,NullPointerException
等錯誤
Spring MVC處理例外主要有三種配置方式
1.全局配置
2.單一Controller
3.單一方法配置
1.全局配置透過註解@ControllerAdvice
的控制器來配置我們全局控制器異常處理,在此註解中包含了三個常用註解
@ExceptionHandler
(用於全局控制器裡的異常)@InitBinder
(用於設置WebDataBinder
),WebDataBinder
是用來自動綁定前台請求參數到Model中@ModelAttribute
(用於綁定鍵值數據到Model中)package com.tutorial.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(value = Exception.class)
public ModelAndView exception(Exception ex,WebRequest request){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("errorSomething","somerror");
modelAndView.setViewName("error");
return modelAndView;
}
//如果我們要讓所有的@RequestMapping擁有此鍵值
@ModelAttribute
public void addAttribute(Model md){
md.addAttribute("message","你可以設定一些錯誤訊息");
}
}
1.ModelAndView
是一個類別(class
)
2.addObject
方法可以增加錯誤訊息在這方法在利用前台映射取出數值
3.setViewName
方法為要返回的錯誤頁面 記住!! 我們如果有使用thymeleaf就放置在對應的classpath底下,我的配置是在於src/main/resources->error.html中
1.一般我們建議配置一個全局的例外處理來做一個導頁狀況,盡量不顯示狀態碼或異常讓別人知道訊息內容,搭配著Log日誌來做一個除錯的處置
2.在傳統配置中我們會使用web.xml來做一個錯誤導頁的處置 ,
ex:
<web-app …>
<error-page>
<error-code>404</error-code>
<location>error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>error.jsp</location>
</error-page>
<error-page>
<error-code>504</error-code>
<location>error.jsp</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>error.jsp</location>
</error-page>
以下略....
</web-app>
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="login-panel panel panel-default">
<div class="panel-body">
此頁面不存在..可以參考底下網址...加入要讓使用者看的錯誤訊息
<p th:utext="${exception}"></p>
</div>
</div>
</div>
</div>
</div>
(https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc )
(http://www.baeldung.com/exception-handling-for-rest-with-spring )